/*
 * pilha.c
 *
 *  Created on: 06/07/2012
 *      Author: annibal
 */

#include "pilha.h"

Pilha *novaPilha() {
	Pilha *p;

	p = (Pilha*) malloc(sizeof(Pilha));
	p->topo = NULL;

	return p;
}

int pilhaVazia(Pilha *p) {
	if (p->topo == NULL) {
		return 1;
	}
	return 0;
}

void empilha(Estado *e, Pilha **p) {
	Elemento *aux;

	aux = (Elemento*) malloc(sizeof(Elemento*));
	aux->estado = e;

	if (pilhaVazia(*p)) {
		(*p)->topo = aux;
		aux->prox = NULL;
	} else {
		aux->prox = (*p)->topo;
		(*p)->topo = aux;
	}
}

Estado *desempilha(Pilha **p) {
	Elemento *aux;
	Estado *e;

	aux = (*p)->topo;
	(*p)->topo = aux->prox;

	e = aux->estado;
	free(aux);
	return e;
}
